﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Threading.Tasks;

public static class MailHandler
{
    public static void SendBookingMail(ScheduleUtilities.BookingDetails bookingDetails)
    {
        if (bookingDetails != null && bookingDetails.roomId != 0 && bookingDetails.id != 0)
        {
            SmtpClient smtpClient = new SmtpClient();
            MailMessage message = new MailMessage();
            StringBuilder stringBuilder = new StringBuilder();

            // Information för servern som skall skicka mailet
            smtpClient.UseDefaultCredentials = false;
            smtpClient.Host = "smtp.gmail.com";
            smtpClient.Port = 587;
            string uname = "emil.w.larsson@gmail.com";
            string pwd = "ninjaf1sk1";
            smtpClient.Credentials = new NetworkCredential(uname, pwd);
            smtpClient.EnableSsl = true;

            // Meddelandedata
            message.From = new MailAddress("bokningar@konferenssystem.se", "Konferenssystem Bokning");
            message.To.Add(new MailAddress(bookingDetails.userEmail, bookingDetails.userName));
            message.Subject = "En bokning har gjorts i ditt namn";
            message.Body = "Din bokning är nu i systemet";

            // Skapar en bokning i string-format
            stringBuilder.AppendLine("BEGIN:VCALENDAR");
            stringBuilder.AppendLine("PRODID:-//Konferenssystem Bokning");
            stringBuilder.AppendLine("VERSION:2.0");
            stringBuilder.AppendLine("METHOD:REQUEST");
            stringBuilder.AppendLine("BEGIN:VEVENT");
            stringBuilder.AppendLine(string.Format("DTSTART:{0:yyyyMMddTHHmmssZ}", bookingDetails.bookingFrom));
            stringBuilder.AppendLine(string.Format("DTSTAMP:{0:yyyyMMddTHHmmssZ}", DateTime.Now));
            stringBuilder.AppendLine(string.Format("DTEND:{0:yyyyMMddTHHmmssZ}", bookingDetails.bookingTo));
            stringBuilder.AppendLine("LOCATION: Konferensrum " + bookingDetails.roomId);
            stringBuilder.AppendLine(string.Format("UID:{0}", Guid.NewGuid()));
            stringBuilder.AppendLine(string.Format("DESCRIPTION:{0}", bookingDetails.message));
            stringBuilder.AppendLine(string.Format("X-ALT-DESC;FMTTYPE=text/html:{0}", bookingDetails.message));
            stringBuilder.AppendLine(string.Format("SUMMARY:{0}", "Bokning av konferensrum " + bookingDetails.roomId));
            stringBuilder.AppendLine(string.Format("ORGANIZER:MAILTO:{0}", message.From.Address));
            stringBuilder.AppendLine(string.Format("ATTENDEE;CN=\"{0}\";RSVP=TRUE:mailto:{1}", message.To[0].DisplayName, message.To[0].Address));
            stringBuilder.AppendLine("BEGIN:VALARM");
            stringBuilder.AppendLine("TRIGGER:-PT15M");
            stringBuilder.AppendLine("ACTION:DISPLAY");
            stringBuilder.AppendLine("DESCRIPTION:Reminder");
            stringBuilder.AppendLine("END:VALARM");
            stringBuilder.AppendLine("END:VEVENT");
            stringBuilder.AppendLine("END:VCALENDAR");

            // Gör om informationen i stringBuilder till en "bokningsfil" som läggs in i diverse kalendrar
            System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType("text/calendar");
            ct.Parameters.Add("method", "REQUEST");
            AlternateView avCal = AlternateView.CreateAlternateViewFromString(stringBuilder.ToString(), ct);

            // Lägger till bokningsfilen som bifogad fil i mailet och skickar sedan iväg det
            message.AlternateViews.Add(avCal);

            try
            {
                smtpClient.Send(message);
            }
            catch
            {

            }
        }
    }

    public static void SendRegistrationMail(string userName, string email, string pinCode)
    {
        if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(email) && !string.IsNullOrEmpty(pinCode))
        {
            SmtpClient smtpClient = new SmtpClient();
            MailMessage message = new MailMessage();
            StringBuilder stringBuilder = new StringBuilder();

            // Information för servern som skall skicka mailet
            smtpClient.UseDefaultCredentials = false;
            smtpClient.Host = "smtp.gmail.com";
            smtpClient.Port = 587;
            string uname = "emil.w.larsson@gmail.com";
            string pwd = "ninjaf1sk1";
            smtpClient.Credentials = new NetworkCredential(uname, pwd);
            smtpClient.EnableSsl = true;

            // Meddelandedata
            message.From = new MailAddress("bokningar@konferenssystem.se", "Konferenssystem Bokning");
            message.To.Add(new MailAddress(email, userName));
            message.Subject = "Registrering i bokningssystem";
            message.IsBodyHtml = true;
            message.Body = "Dina uppgifter finns nu i bokningssystemet och du kan nu boka och ändra bokningar!"
                            + "<br /><br />"
                            + "Namn: " + userName + "<br />"
                            + "E-mail: " + email + "<br />"
                            + "PIN-kod: " + pinCode + "<br /><br />"
                            + "Spara detta mail för att enkelt hålla koll på dina kontouppgifter.<br />"
                            + " - <em>Konferenssystem Bokning</em>";
            try
            {
                smtpClient.Send(message);
            }
            catch
            {

            }
        }
    }
}